package com.qfedu.bigdataapp.fragment;

import android.content.Intent;
import android.os.Bundle;

import androidx.fragment.app.Fragment;

import android.view.LayoutInflater;
import android.view.View;
import android.view.ViewGroup;
import android.widget.AdapterView;
import android.widget.GridView;
import android.widget.ListView;

import com.alibaba.fastjson.JSON;
import com.qfedu.bigdataapp.Const;
import com.qfedu.bigdataapp.R;
import com.qfedu.bigdataapp.activity.PlayHotVideoActivity;
import com.qfedu.bigdataapp.adapter.HotVideoAdapter;
import com.qfedu.bigdataapp.bean.HotVideo;
import com.qfedu.bigdataapp.bean.ReturnData;

import org.json.JSONObject;
import org.xutils.HttpManager;
import org.xutils.common.Callback;
import org.xutils.http.RequestParams;
import org.xutils.x;

import java.util.List;

/**
 * IndexFragment是首页的碎片实现，这是一个Fragment
 */
public class IndexFragment extends Fragment {

    //    private ListView lvHotVideo;
    private GridView gvHotVideo;

    //activity中也有一个onCreate方法
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);

    }

    @Override
    public View onCreateView(LayoutInflater inflater, ViewGroup container,
                             Bundle savedInstanceState) {
        //ListView：
        //Adapter：getView
        //① 确定要展示的数据源
        //② 要准备好要展示的布局模板：泵
        //LayoutInflater.from().inflate()
        //③ 把数据设置到布局模板的控件上 展示
        View root = inflater.inflate(R.layout.fragment_index, container, false);
//        lvHotVideo = root.findViewById(R.id.lv_hotvideo);//绑定listview控件
        gvHotVideo = root.findViewById(R.id.gv_hotvideo);
        return root;
    }

    @Override
    public void onStart() {
        super.onStart();
        //1、获取网络上的热门视频数据
        HttpManager manager = x.http();
        //get、post：两种网络请求方式
        //get：浏览器默认的请求方式，将数据以拼接的形式进行传输，传输数据量有限
        //通常，从服务器获取数据，可以采用get方式
        //http://xxxx?parm1=value&param2=value2&...
        //post：将请求数据存放在请求体中传输，传输数据没有限制
        //通常，客户端将数据提交到服务器时，采用post方式
        RequestParams params = new RequestParams(Const.HOTVIDEO_URL);
        //设置请求头信息
        params.addHeader("Content-Type", "application/x-www-form-urlencoded");
        //设置请求数据
        params.addParameter("key", Const.HOTVIDEO_KEY);
        params.addParameter("type", "hot_video");
        params.addParameter("size", Const.PAGE_SIZE);//每一次请求的数据的条数
        //发起一个网络请求 的操作
        System.out.println(000);
        //启动一个网络get请求（需要时间）
        manager.get(params, new Callback.CommonCallback<String>() {
            @Override
            public void onSuccess(String result) {
                // TODO: 2023/4/9 网络请求成功时
                //json格式的数据：{}、[]
                //使用fastjson库解析 json数据 解析得到Java对象
                ReturnData returnData = JSON.parseObject(result, ReturnData.class);
                showData(returnData.getResult());
            }

            @Override
            public void onError(Throwable ex, boolean isOnCallback) {
                // TODO: 2023/4/9 网络请求失败时
                System.out.println("onError:" + 222);
            }

            @Override
            public void onCancelled(CancelledException cex) {
                // TODO: 2023/4/9 用户取消网络请求时
                System.out.println("onCancelled:" + 333);
            }

            @Override
            public void onFinished() {
                // TODO: 2023/4/9 网络请求结束时调用该方法
                System.out.println("onFinished:" + 444);
            }
        });
        System.out.println(555);
        System.out.println(666);
        System.out.println(777);
    }

    /**
     * 展示从网络上获取到的热门视频数据
     *
     * @param result 热门视频的数据
     */
    private void showData(List<HotVideo> result) {
        // TODO: 2023/4/9 设置和展示热门视频的数据
        //1、编写一个自定义的用于展示热门视频数据的Adapter
        HotVideoAdapter adapter = new HotVideoAdapter(getContext(), result);
        //2、为ListView控件设置适配器Adapter
//        lvHotVideo.setAdapter(adapter);
        gvHotVideo.setAdapter(adapter);

        //为列表控件 添加 点击事件 监听
        gvHotVideo.setOnItemClickListener(new AdapterView.OnItemClickListener() {
            @Override
            public void onItemClick(AdapterView<?> adapterView, View view, int position, long l) {
                //当用户点击 列表控件的某个条目时，程序会到此处执行
                // TODO: 2023/4/13 打开新界面,播放用户点击的热门视频
                //分析：需要打开一个播放短视频的新页面
                //需要新建一个Activity界面，用于播放短视频
                openPlayHotVideo(result.get(position));
            }
        });
    }

    /**
     * 该方法用于打开播放短视频的页面
     */
    private void openPlayHotVideo(HotVideo hotVideo) {
        Intent intent = new Intent(getContext(), PlayHotVideoActivity.class);
        intent.putExtra("video", hotVideo);
        getContext().startActivity(intent);
    }
}